package pe.com.upc.edu.rtt.gestionar.evento.controller;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.portlet.bind.annotation.ActionMapping;

import pe.com.upc.edu.rtt.Equipo;
import pe.com.upc.edu.rtt.EquipoServiceSoapProxy;
import pe.com.upc.edu.rtt.Estadio;
import pe.com.upc.edu.rtt.EstadioServiceSoapProxy;
import pe.com.upc.edu.rtt.EventoDeportivo;
import pe.com.upc.edu.rtt.EventoServicesSoapProxy;
import pe.com.upc.edu.rtt.gestionar.evento.bean.EquipoDeportivoBean;
import pe.com.upc.edu.rtt.gestionar.evento.bean.EstadioBean;
import pe.com.upc.edu.rtt.gestionar.evento.bean.EventoDeportivoBean;

import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.ParamUtil;

/**
 * Portlet implementation class GestionarEventoController
 */
@Controller
@RequestMapping("VIEW")
public class GestionarEventoController {

	/** The _log. */
	private static Log _log = LogFactoryUtil.getLog(GestionarEventoController.class);
	private static EventoServicesSoapProxy eventoServicesSoapProxy = new EventoServicesSoapProxy();
	private static EquipoServiceSoapProxy equipoServiceSoapProxy = new EquipoServiceSoapProxy();
	private static EstadioServiceSoapProxy equiEstadioServiceSoapProxy = new EstadioServiceSoapProxy();
	private boolean filtrado = true;
	@RequestMapping
	protected String defaultView(RenderRequest renderRequest, RenderResponse renderResponse) throws Exception {
		try {
			if(filtrado){					
				/* Listar Eventos, Equipos y Estadios */
				List<EventoDeportivoBean> listEventos = llenarListadoEventos();
				renderRequest.setAttribute("listadoEvento", listEventos);		
			}
			List<EquipoDeportivoBean> listEquipos = listadoEquiposDep();
			List<EstadioBean> listEstadios = listadoEstadios();
			renderRequest.setAttribute("listadoEquipo", listEquipos);
			renderRequest.setAttribute("listadoEstadio", listEstadios);		
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "view";
	}

	public List<EventoDeportivoBean> llenarListadoEventos() {
		int todos;
		try {
			todos = eventoServicesSoapProxy.countEventosFiltrado("", "", "", "", "");
			EventoDeportivo[] eventoDeportivos = eventoServicesSoapProxy.listarEventosFiltrado(1, todos, "", "", "", "", "");
			if (eventoDeportivos != null && eventoDeportivos.length > 0) {
				List<EventoDeportivoBean> listado = new ArrayList<EventoDeportivoBean>();
				EventoDeportivoBean evento1 = null;
				for (EventoDeportivo eventoDeportivo : eventoDeportivos) {
					evento1 = new EventoDeportivoBean(eventoDeportivo.getIdEvento(), eventoDeportivo.getFechaInicio(), eventoDeportivo.getFechaFinEvent(),
							eventoDeportivo.getDescripcion(), eventoDeportivo.getIdEstadio(), eventoDeportivo.getUuidContenido(), eventoDeportivo.getLimiteEntradas(),
							eventoDeportivo.getPrecioEntrada(), null, null);
					listado.add(evento1);
				}
				return listado;
			}
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return null;
	}

	public List<EquipoDeportivoBean> listadoEquiposDep() {
		try {
			Equipo[] equipos = equipoServiceSoapProxy.getListarEquipos();
			if (equipos != null && equipos.length > 0) {
				List<EquipoDeportivoBean> listado = new ArrayList<EquipoDeportivoBean>();
				EquipoDeportivoBean equipo1 = null;
				for (Equipo equipo : equipos) {
					equipo1 = new EquipoDeportivoBean(equipo.getIdequipo(), equipo.getNombre());
					listado.add(equipo1);
				}
				return listado;
			}
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return null;
	}

	public List<EstadioBean> listadoEstadios() {

		try {
			Estadio[] estadios = equiEstadioServiceSoapProxy.getlistarEstadios();
			if (estadios != null && estadios.length > 0) {
				List<EstadioBean> listado = new ArrayList<EstadioBean>();
				EstadioBean estadio1 = null;
				for (Estadio estadio : estadios) {
					estadio1 = new EstadioBean(estadio.getIdestadio(), estadio.getNombre());
					listado.add(estadio1);
				}
				return listado;
			}
		} catch (RemoteException e) {
			e.printStackTrace();
		}
		return null;
	}

	@ActionMapping(value = "buscarEvento")
	protected void buscarEvento(ActionRequest request, ActionResponse response) throws Exception {
		_log.info("******** buscarEvento *********");
		try {
			String descripcion = ParamUtil.getString(request, "descripcion");
			String fechaInicio = ParamUtil.getString(request, "fechaInicio");
			String fechaFin = ParamUtil.getString(request, "fechaFin");
			String estadio = ParamUtil.getString(request, "estadio");
			String equipo1 = ParamUtil.getString(request, "equipo1");
			String equipo2 = ParamUtil.getString(request, "equipo2");
			_log.info("descripcion: " + descripcion + " estadio: " + estadio+ " fechaInicio: " + fechaInicio + " fechaFin:" + fechaFin + " equipo1: " + equipo1 + " equipo2: " + equipo2);
			// BUSCAR
			int todos = eventoServicesSoapProxy.countEventosFiltrado("", "", fechaInicio, fechaFin, descripcion);
			System.out.println("todos:"+todos);
			EventoDeportivo[] eventoDeportivos = eventoServicesSoapProxy.listarEventosFiltrado(0, todos, "", estadio,fechaInicio, fechaFin, descripcion);
			if (eventoDeportivos != null && eventoDeportivos.length > 0) {
				List<EventoDeportivoBean> listado = new ArrayList<EventoDeportivoBean>();
				EventoDeportivoBean evento1 = null;
				for (EventoDeportivo eventoDeportivo : eventoDeportivos) {
					evento1 = new EventoDeportivoBean(eventoDeportivo.getIdEvento(), eventoDeportivo.getFechaInicio(), eventoDeportivo.getFechaFinEvent(),
							eventoDeportivo.getDescripcion(), eventoDeportivo.getIdEstadio(), eventoDeportivo.getUuidContenido(), eventoDeportivo.getLimiteEntradas(),
							eventoDeportivo.getPrecioEntrada(), null, null);
					listado.add(evento1);
				}
				request.setAttribute("listadoEvento", listado);					
				filtrado = false;				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@ActionMapping(value = "nuevoEvento")
	protected void nuevoEvento(ActionRequest request, ActionResponse response) throws Exception {
		_log.info("******** nuevoEvento *********");
		try {
			response.setRenderParameter("action", "nuevoEvento");
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@RequestMapping(params = "action=nuevoEvento")
	protected String nuevoEvento(@RequestParam(value = "id", required = false) String id, RenderRequest renderRequest, RenderResponse renderResponse) {
		_log.info("******** nuevoEvento pagina *********");

		// Listados de Combos
		List<EquipoDeportivoBean> listEquipos = listadoEquiposDep();
		List<EstadioBean> listEstadios = listadoEstadios();
		EventoDeportivoBean evento = new EventoDeportivoBean();
		renderRequest.setAttribute("evento", evento);
		renderRequest.setAttribute("listadoEquipo", listEquipos);
		renderRequest.setAttribute("listadoEstadio", listEstadios);

		return "nuevoEvento";
	}

	@ActionMapping(value = "editarEvento")
	public void editarEvento(@RequestParam(value = "id", required = false) String id, ActionRequest request, ActionResponse response) throws Exception {
		_log.info("******** editarEvento pagina *********" + id);
		
		
		
		

		response.setRenderParameter("id", id);
		response.setRenderParameter("action", "editarEvento");
	}

	@RequestMapping(params = "action=editarEvento")
	protected String editarEvento(@RequestParam(value = "id", required = false) String id, RenderRequest renderRequest, RenderResponse renderResponse) {
		_log.info("******** editarEvento *********");

		// Obtener Evento a esitar
		// EventoDeportivoBean evento = new EventoDeportivoBean(13L,
		// "10/12/2013 05:00 pm", "10/12/2013 8;00pm", "EJEMPLO EVENTO", 3l,
		// 200l, 500, 25.25, 1, 3);
		EventoDeportivo eventoDepotivo;
		try {
			System.out.println(id);
			eventoDepotivo = eventoServicesSoapProxy.getEvento(Integer.parseInt(id));			
			// Listado de Combos Equipo y Estadios
			
			EventoDeportivoBean evento = 
			new EventoDeportivoBean
			(eventoDepotivo.getIdEvento(), eventoDepotivo.getFechaInicio(),
					eventoDepotivo.getFechaFinEvent(), eventoDepotivo.getDescripcion(), 
					eventoDepotivo.getIdEstadio(), eventoDepotivo.getUuidContenido(), (eventoDepotivo.getLimiteEntradas()),				
					eventoDepotivo.getPrecioEntrada(), null, null);
			List<EquipoDeportivoBean> listEquipos = listadoEquiposDep();
			List<EstadioBean> listEstadios = listadoEstadios();

			renderRequest.setAttribute("listadoEquipo", listEquipos);
			renderRequest.setAttribute("listadoEstadio", listEstadios);
		    renderRequest.setAttribute("evento", evento);
			
			
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}		
		return "nuevoEvento";
	}

	@ActionMapping(value = "actionRegistrar")
	protected void actionRegistrar(ActionRequest request, ActionResponse response) throws Exception {
		_log.info("******** nuevoEvento actionRegistrar *********");
		try {
			String idEvento = ParamUtil.getString(request, "idEvento");
			String descripcion = ParamUtil.getString(request, "descripcion");
			String fechaInicio = ParamUtil.getString(request, "fechaInicio");
			String fechaFin = ParamUtil.getString(request, "fechaFin");
			String idEstadio = ParamUtil.getString(request, "idEstadio");
			String idContenido = ParamUtil.getString(request, "idContenido");
			String cantEntradas = ParamUtil.getString(request, "cantEntradas");
			String precio = ParamUtil.getString(request, "precio");
			String equipo1 = ParamUtil.getString(request, "equipo1");
			String equipo2 = ParamUtil.getString(request, "equipo2");

			_log.info("idEvento " + idEvento + "descripcion " + descripcion + "idEstadio " + idEstadio+ "equipo1 " + equipo1+ "cantEntradas " + cantEntradas);
			
			
			
			if (idEvento == null || "".equals(idEvento) || "0".equals(idEvento)) {
				_log.info("Registrar Nuevo Evento");
				eventoServicesSoapProxy.crearEvento(
						fechaInicio, 
						fechaFin, 
						descripcion,
						idContenido, 
						Integer.parseInt(cantEntradas),
						Integer.parseInt(idEstadio) ,
						Double.parseDouble( precio ) , 
						idContenido, 
						Integer.parseInt(equipo1), 
						Integer.parseInt(equipo2) );
			} else {
				_log.info("Editar Evento " + idEvento);
				eventoServicesSoapProxy.modificarEvento(
						Integer.parseInt(idEvento) ,
						fechaInicio, 
						fechaFin, 
						descripcion, 
						idContenido, 
						Integer.parseInt(cantEntradas),
						Integer.parseInt(idEstadio) , 
						Double.parseDouble( precio ) , 
						idContenido 
						, Integer.parseInt(equipo1), 
						Integer.parseInt(equipo2) );

			}

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}
